perm filename TLKEF6.FAI[1,VDS] blob sn#215595 filedate 1977-04-22 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE TLKEF6
C00004 00003	START OF EXECUTABLE CODE
C00008 00004		[LOCAL STORAGE AREA]
C00011 ENDMK
C⊗;
TITLE TLKEF6
INTERNAL TLKEF6

;"TLKEF6" IS A SAIL CALLABLE PROCEDURE FOR READING THE FORCE SENSING WRIST
;STRAIN GAGES FROM A PROGRAM THAT RUNS ON THE PDP11/45.  A SAMPLE
;SAIL CALL IS AS FOLLOWS:
;
;	ERROR←TLKEF6(INTEGER ARRAY READINGS);  
;WHERE
;	ERROR = 0 IF "TLKEF6" WAS SUCCESSFUL, ≠0 OTHERWISE
;	READINGS = 10x8 ARRAY IN WHICH THE STRAIN GAGES READINGS ARE RETURNED
;
;THIS ROUTINE TYPES IT'S OWN ERROR MESSAGES ON THE TTY.

;DEFINITIONS

P←17		;PUSH STACK REGISTER
MASLOC←40000	;MASTER NUMBER IN ELF
DATADD←40001	;START ADDRESS TO READ DATA FROM ELF
MASTER←10567	;CHECK NUMBER FROM ELF IF DONE READING
DBUFL ←=80	;NUMBER OF WORDS TO TRANSFER FROM THE ELF
;START OF EXECUTABLE CODE

TLKEF6:	SETZ	1,		;CLEAR ERROR FLAG
       	MOVEM	16,HOLD+16	;SAVE THE REGISTERS
	HRRZI	16,HOLD
	BLT	16,HOLD+15

;INTIALIZE THE ELF AND CLEAR THE MASTER NUMBER.  THIS INSURES THAT
;WE READ CURRENT DATA

	IOPUSH	1,		;CALLER MIGHT WANT THIS CHANNEL
	JRST	[   OUTSTR CM0	;IOPDLOV MESSAGE
		    JRST   ERR  ]
	INIT	1,17  		;INITIALIZE THE ELF
	SIXBIT	/ELF/
	0
	JRST	[   OUTSTR CM1		;ERROR RETURN
ERR:		    AOS    HOLD+1	;RETURN ERROR VALUE
		    JRST   TLKDNE  ]
	GETSTS	1,1		;GET THE ELF STATUS WORD
	TRNE	1,777700	;CHECK FOR ERROR CONDITION
	JRST	[   OUTSTR CM2		;INDICATE STATUS ERROR
		    JRST   ERR    ]
	MTAPE	1,MASADR	;ZERO MASTER NUMBER
	JRST	[   OUTSTR CM3   	;ERROR RETURN
		    JRST   ERR  ]

;WAIT TILL ELF COLLECTS THE DATA
	
	MOVEI	3,=10		;TRY READING ELF DATA 10 TIMES
READLP:	SETZ	1,		;SLEEP BEFORE TRYING AGAIN
	SLEEP	1,
	MTAPE	1,DNEADD	;GET THE DONE WORD FROM THE ELF
	JRST	[   OUTSTR CM6		;ERROR RETURN
		    JRST   ERR  ]
	MOVE	2,DNEWRD	;LOAD VALUE INTO REGISTER
	JUMPG 	2,ELFDNE	;BRANCH IF THE ELF SIGNALS DONE
	SOJG	3,READLP	;REPEAT IF MORE TIME LEFT
	OUTSTR	CM4 		;ELSE TELL OPERATOR ELF TOOK TOO MUCH TIME
	JRST	ERR

;TRANSFER THE DATA BACK TO THE MAIN PROGRAM IF ALL WENT WELL
	
ELFDNE:	CAIE	2,MASTER	;MAKE SURE WE GOT THE RIGHT MASTER NUMBER
	JRST	[   OUTSTR CM7	;SIGNAL ERROR
	            JRST   ERR	]
	MOVE	2,-1(P)		;GET ADDRESS TO TRANSFER DATA
	SOJ	2,     		;DECREMENT ARRAY POINTER
	HRLI	2,-DBUFL 	;SET POINTER TO TRANSFER DATA
	MOVEM	2,INLST
     	USETI	1,GAGE  	;SET UP INPUT STRAIN GAGE DATA
     	IN	1,INLST		;READ IN A BLOCK OF DATA
	JRST	.+2		;NORMAL RETURN
	JRST	[   OUTSTR CM8		;ERROR RETURN
		    JRST   ERR  ]

;RETURN TO CALLING PROGRAM

TLKDNE:	IOPOP	1,		;RELEASE THE ELF & RESTORE CHANNEL 1
	JFCL			;JUST CANNOT HAPPEN
       	HRLZI	16,HOLD		;RESTORE THE REGISTERS
	BLT	16,16
	SUB	P,[2(2)]	;POP ARGUMENTS OFF STACK
	JRST	@2(P)		;RETURN
;	[LOCAL STORAGE AREA]

HOLD:	BLOCK	17

;I/O DATA AREAS

GAGE:	400004,,400000+DATADD	;MODE AND ADDRESS FOR "IN" OF STRAIN GAGE DATA

INLST:	0			;PT. TO DATA ARRAY
	0

MASADR:	003000,,MASLOC		;CLEAR MASTER WORD
	0

DNEADD:	002004,,MASLOC		;MODE AND ADDRESS FOR MASTER DONE WORD
DNEWRD:	0			;VALUE OF DONE WORK

;OUTPUT STRINGS

CM0:	ASCIZ/IOPDLOV WHEN TRY TO SAVE CHANNEL 1 FOR "ELF"
/

CM1:	ASCIZ/CANNOT INIT "ELF"
/
CM2:	ASCIZ/"ELF" STATUS WORD INDICATES ERROR CONDITION
/
CM3:	ASCIZ/UNABLE TO ZERO MASTER NUMBER IN "ELF"
/
CM4:	ASCIZ/"ELF" NOT TRANSFERING STRAIN GAGE READINGS
/
CM5: 	ASCIZ/BAD READ FROM "ELF" DURING POSITION DATA TRANSFER
/
CM6:	ASCIZ/ELF READ ERROR WHILE WAITING FOR ADC READING TO COMPLETE
/
CM7:	ASCIZ/ELF MASTER NUMBER INCORRECT, CAN'T READ THE DATA
/
CM8:	ASCIZ/ERROR IN TRANSFERING STRAIN GAGE DATA
/

END